home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / djgpp / docs / gcc / install.tex < prev    next >
Encoding:
Text File  |  1994-12-21  |  82.1 KB  |  2,090 lines

  1. @c Copyright (C) 1988, 1989, 1992, 1993, 1994 Free Software Foundation, Inc.
  2. @c This is part of the GCC manual.
  3. @c For copying conditions, see the file gcc.texi.
  4.  
  5. @c The text of this file appears in the file INSTALL
  6. @c in the GCC distribution, as well as in the GCC manual.
  7.  
  8. @ifclear INSTALLONLY
  9. @node Installation
  10. @chapter Installing GNU CC
  11. @end ifclear
  12. @cindex installing GNU CC
  13.  
  14. @menu
  15. * Configurations::    Configurations Supported by GNU CC.
  16. * Other Dir::     Compiling in a separate directory (not where the source is).
  17. * Cross-Compiler::   Building and installing a cross-compiler.
  18. * Sun Install::   See below for installation on the Sun.
  19. * VMS Install::   See below for installation on VMS.
  20. * Collect2::      How @code{collect2} works; how it finds @code{ld}.
  21. * Header Dirs::   Understanding the standard header file directories.
  22. @end menu
  23.  
  24. Here is the procedure for installing GNU CC on a Unix system.  See
  25. @ref{VMS Install}, for VMS systems.  In this section we assume you
  26. compile in the same directory that contains the source files; see
  27. @ref{Other Dir}, to find out how to compile in a separate directory on Unix
  28. systems.
  29.  
  30. You cannot install GNU C by itself on MSDOS; it will not compile under
  31. any MSDOS compiler except itself.  You need to get the complete
  32. compilation package DJGPP, which includes binaries as well as sources,
  33. and includes all the necessary compilation tools and libraries.
  34.  
  35. @enumerate
  36. @item
  37. If you have built GNU CC previously in the same directory for a
  38. different target machine, do @samp{make distclean} to delete all files
  39. that might be invalid.  One of the files this deletes is
  40. @file{Makefile}; if @samp{make distclean} complains that @file{Makefile}
  41. does not exist, it probably means that the directory is already suitably
  42. clean.
  43.  
  44. @item
  45. On a System V release 4 system, make sure @file{/usr/bin} precedes
  46. @file{/usr/ucb} in @code{PATH}.  The @code{cc} command in
  47. @file{/usr/ucb} uses libraries which have bugs.
  48.  
  49. @item
  50. Specify the host, build and target machine configurations.  You do this
  51. by running the file @file{configure}.
  52.  
  53. The @dfn{build} machine is the system which you are using, the
  54. @dfn{host} machine is the system where you want to run the resulting
  55. compiler (normally the build machine), and the @dfn{target} machine is
  56. the system for which you want the compiler to generate code.
  57.  
  58. If you are building a compiler to produce code for the machine it runs
  59. on (a native compiler), you normally do not need to specify any operands
  60. to @file{configure}; it will try to guess the type of machine you are on
  61. and use that as the build, host and target machines.  So you don't need
  62. to specify a configuration when building a native compiler unless
  63. @file{configure} cannot figure out what your configuration is or guesses
  64. wrong.
  65.  
  66. In those cases, specify the build machine's @dfn{configuration name}
  67. with the @samp{--build} option; the host and target will default to be
  68. the same as the build machine.  (If you are building a cross-compiler,
  69. see @ref{Cross-Compiler}.)
  70.  
  71. Here is an example:
  72.  
  73. @smallexample
  74. ./configure --build=sparc-sun-sunos4.1
  75. @end smallexample
  76.  
  77. A configuration name may be canonical or it may be more or less
  78. abbreviated.
  79.  
  80. A canonical configuration name has three parts, separated by dashes.
  81. It looks like this: @samp{@var{cpu}-@var{company}-@var{system}}.
  82. (The three parts may themselves contain dashes; @file{configure}
  83. can figure out which dashes serve which purpose.)  For example,
  84. @samp{m68k-sun-sunos4.1} specifies a Sun 3.
  85.  
  86. You can also replace parts of the configuration by nicknames or aliases.
  87. For example, @samp{sun3} stands for @samp{m68k-sun}, so
  88. @samp{sun3-sunos4.1} is another way to specify a Sun 3.  You can also
  89. use simply @samp{sun3-sunos}, since the version of SunOS is assumed by
  90. default to be version 4.  @samp{sun3-bsd} also works, since
  91. @file{configure} knows that the only BSD variant on a Sun 3 is SunOS.
  92.  
  93. You can specify a version number after any of the system types, and some
  94. of the CPU types.  In most cases, the version is irrelevant, and will be
  95. ignored.  So you might as well specify the version if you know it.
  96.  
  97. See @ref{Configurations}, for a list of supported configuration names and
  98. notes on many of the configurations.  You should check the notes in that
  99. section before proceding any further with the installation of GNU CC.
  100.  
  101. There are four additional options you can specify independently to 
  102. describe variant hardware and software configurations.  These are
  103. @samp{--with-gnu-as}, @samp{--with-gnu-ld}, @samp{--with-stabs} and
  104. @samp{--nfp}.
  105.  
  106. @table @samp
  107. @item --with-gnu-as
  108. If you will use GNU CC with the GNU assembler (GAS), you should declare
  109. this by using the @samp{--with-gnu-as} option when you run
  110. @file{configure}.
  111.  
  112. Using this option does not install GAS.  It only modifies the output of
  113. GNU CC to work with GAS.  Building and installing GAS is up to you.
  114.  
  115. Conversely, if you @emph{do not} wish to use GAS and do not specify
  116. @samp{--with-gnu-as} when building GNU CC, it is up to you to make sure
  117. that GAS is not installed.  GNU CC searches for a program named
  118. @code{as} in various directories; if the program it finds is GAS, then
  119. it runs GAS.  If you are not sure where GNU CC finds the assembler it is
  120. using, try specifying @samp{-v} when you run it.
  121.  
  122. The systems where it makes a difference whether you use GAS are@*
  123. @samp{hppa1.0-@var{any}-@var{any}}, @samp{hppa1.1-@var{any}-@var{any}},
  124. @samp{i386-@var{any}-sysv}, @samp{i386-@var{any}-isc},@*
  125. @samp{i860-@var{any}-bsd}, @samp{m68k-bull-sysv}, @samp{m68k-hp-hpux},
  126. @samp{m68k-sony-bsd},@*
  127. @samp{m68k-altos-sysv}, @samp{m68000-hp-hpux}, @samp{m68000-att-sysv},
  128. and @samp{mips-@var{any}}).  On any other system, @samp{--with-gnu-as}
  129. has no effect.
  130.  
  131. On the systems listed above (except for the HP-PA, for ISC on the
  132. 386, and for @samp{mips-sgi-irix5.*}), if you use GAS, you should also
  133. use the GNU linker (and specify @samp{--with-gnu-ld}).
  134.  
  135. @item --with-gnu-ld
  136. Specify the option @samp{--with-gnu-ld} if you plan to use the GNU
  137. linker with GNU CC.
  138.  
  139. This option does not cause the GNU linker to be installed; it just
  140. modifies the behavior of GNU CC to work with the GNU linker.
  141. Specifically, it inhibits the installation of @code{collect2}, a program
  142. which otherwise serves as a front-end for the system's linker on most
  143. configurations.
  144.  
  145. @item --with-stabs
  146. On MIPS based systems and on Alphas, you must specify whether you want
  147. GNU CC to create the normal ECOFF debugging format, or to use BSD-style
  148. stabs passed through the ECOFF symbol table.  The normal ECOFF debug
  149. format cannot fully handle languages other than C.  BSD stabs format can
  150. handle other languages, but it only works with the GNU debugger GDB.
  151.  
  152. Normally, GNU CC uses the ECOFF debugging format by default; if you
  153. prefer BSD stabs, specify @samp{--with-stabs} when you configure GNU
  154. CC.
  155.  
  156. No matter which default you choose when you configure GNU CC, the user
  157. can use the @samp{-gcoff} and @samp{-gstabs+} options to specify explicitly
  158. the debug format for a particular compilation.
  159.  
  160. @samp{--with-stabs} is meaningful on the ISC system on the 386, also, if
  161. @samp{--with-gas} is used.  It selects use of stabs debugging
  162. information embedded in COFF output.  This kind of debugging information
  163. supports C++ well; ordinary COFF debugging information does not.
  164.  
  165. @samp{--with-stabs} is also meaningful on 386 systems running SVR4.  It
  166. selects use of stabs debugging information embedded in ELF output.  The
  167. C++ compiler currently (2.6.0) does not support the DWARF debugging
  168. information normally used on 386 SVR4 platforms; stabs provide a
  169. workable alternative.  This requires gas and gdb, as the normal SVR4
  170. tools can not generate or interpret stabs.
  171.  
  172. @item --nfp
  173. On certain systems, you must specify whether the machine has a floating
  174. point unit.  These systems include @samp{m68k-sun-sunos@var{n}} and
  175. @samp{m68k-isi-bsd}.  On any other system, @samp{--nfp} currently has no
  176. effect, though perhaps there are other systems where it could usefully
  177. make a difference.
  178. @end table
  179.  
  180. The @file{configure} script searches subdirectories of the source
  181. directory for other compilers that are to be integrated into GNU CC.
  182. The GNU compiler for C++, called G++ is in a subdirectory named
  183. @file{cp}.  @file{configure} inserts rules into @file{Makefile} to build
  184. all of those compilers.
  185.  
  186. Here we spell out what files will be set up by @code{configure}.  Normally
  187. you need not be concerned with these files.
  188.  
  189. @itemize @bullet
  190. @item
  191. @ifset INTERNALS
  192. A symbolic link named @file{config.h} is made to the top-level config
  193. file for the machine you will run the compiler on (@pxref{Config}).
  194. This file is responsible for defining information about the host
  195. machine.  It includes @file{tm.h}.
  196. @end ifset
  197. @ifclear INTERNALS
  198. A symbolic link named @file{config.h} is made to the top-level config
  199. file for the machine you plan to run the compiler on (@pxref{Config,,The
  200. Configuration File, gcc.info, Using and Porting GCC}).  This file is
  201. responsible for defining information about the host machine.  It
  202. includes @file{tm.h}.
  203. @end ifclear
  204.  
  205. The top-level config file is located in the subdirectory @file{config}.
  206. Its name is always @file{xm-@var{something}.h}; usually
  207. @file{xm-@var{machine}.h}, but there are some exceptions.
  208.  
  209. If your system does not support symbolic links, you might want to
  210. set up @file{config.h} to contain a @samp{#include} command which
  211. refers to the appropriate file.
  212.  
  213. @item
  214. A symbolic link named @file{tconfig.h} is made to the top-level config
  215. file for your target machine.  This is used for compiling certain
  216. programs to run on that machine.
  217.  
  218. @item
  219. A symbolic link named @file{tm.h} is made to the machine-description
  220. macro file for your target machine.  It should be in the subdirectory
  221. @file{config} and its name is often @file{@var{machine}.h}.
  222.  
  223. @item
  224. A symbolic link named @file{md} will be made to the machine description
  225. pattern file.  It should be in the @file{config} subdirectory and its
  226. name should be @file{@var{machine}.md}; but @var{machine} is often not
  227. the same as the name used in the @file{tm.h} file because the
  228. @file{md} files are more general.
  229.  
  230. @item
  231. A symbolic link named @file{aux-output.c} will be made to the output
  232. subroutine file for your machine.  It should be in the @file{config}
  233. subdirectory and its name should be @file{@var{machine}.c}.
  234.  
  235. @item
  236. The command file @file{configure} also constructs the file
  237. @file{Makefile} by adding some text to the template file
  238. @file{Makefile.in}.  The additional text comes from files in the
  239. @file{config} directory, named @file{t-@var{target}} and
  240. @file{x-@var{host}}.  If these files do not exist, it means nothing
  241. needs to be added for a given target or host.
  242. @c does the above work now?  --mew
  243. @end itemize
  244.  
  245. @item
  246. The standard directory for installing GNU CC is @file{/usr/local/lib}.
  247. If you want to install its files somewhere else, specify
  248. @samp{--prefix=@var{dir}} when you run @file{configure}.  Here @var{dir}
  249. is a directory name to use instead of @file{/usr/local} for all purposes
  250. with one exception: the directory @file{/usr/local/include} is searched
  251. for header files no matter where you install the compiler.  To override
  252. this name, use the @code{--local-prefix} option below.
  253.  
  254. @item
  255. Specify @samp{--local-prefix=@var{dir}} if you want the compiler to
  256. search directory @file{@var{dir}/include} for locally installed header
  257. files @emph{instead} of @file{/usr/local/include}.
  258.  
  259. You should specify @samp{--local-prefix} @strong{only} if your site has
  260. a different convention (not @file{/usr/local}) for where to put
  261. site-specific files.
  262.  
  263. @strong{Do not} specify @file{/usr} as the @samp{--local-prefix}!  The
  264. directory you use for @samp{--local-prefix} @strong{must not} contain
  265. any of the system's standard header files.  If it did contain them,
  266. certain programs would be miscompiled (including GNU Emacs, on certain
  267. targets), because this would override and nullify the header file
  268. corrections made by the @code{fixincludes} script.
  269.  
  270. @cindex Bison parser generator
  271. @cindex parser generator, Bison
  272. @item
  273. Make sure the Bison parser generator is installed.  (This is
  274. unnecessary if the Bison output files @file{c-parse.c} and
  275. @file{cexp.c} are more recent than @file{c-parse.y} and @file{cexp.y}
  276. and you do not plan to change the @samp{.y} files.)
  277.  
  278. Bison versions older than Sept 8, 1988 will produce incorrect output
  279. for @file{c-parse.c}.
  280.  
  281. @item
  282. If you have chosen a configuration for GNU CC which requires other GNU
  283. tools (such as GAS or the GNU linker) instead of the standard system
  284. tools, install the required tools in the build directory under the names
  285. @file{as}, @file{ld} or whatever is appropriate.  This will enable the
  286. compiler to find the proper tools for compilation of the program
  287. @file{enquire}.
  288.  
  289. Alternatively, you can do subsequent compilation using a value of the
  290. @code{PATH} environment variable such that the necessary GNU tools come
  291. before the standard system tools.
  292.  
  293. @item
  294. Build the compiler.  Just type @samp{make LANGUAGES=c} in the compiler
  295. directory.
  296.  
  297. @samp{LANGUAGES=c} specifies that only the C compiler should be
  298. compiled.  The makefile normally builds compilers for all the supported
  299. languages; currently, C, C++ and Objective C.  However, C is the only
  300. language that is sure to work when you build with other non-GNU C
  301. compilers.  In addition, building anything but C at this stage is a
  302. waste of time.
  303.  
  304. In general, you can specify the languages to build by typing the
  305. argument @samp{LANGUAGES="@var{list}"}, where @var{list} is one or more
  306. words from the list @samp{c}, @samp{c++}, and @samp{objective-c}.  If
  307. you have any additional GNU compilers as subdirectories of the GNU CC
  308. source directory, you may also specify their names in this list.
  309.  
  310. Ignore any warnings you may see about ``statement not reached'' in
  311. @file{insn-emit.c}; they are normal.  Also, warnings about ``unknown
  312. escape sequence'' are normal in @file{genopinit.c} and perhaps some
  313. other files.  Likewise, you should ignore warnings about ``constant is
  314. so large that it is unsigned'' in @file{insn-emit.c} and
  315. @file{insn-recog.c}.  Any other compilation errors may represent bugs in
  316. the port to your machine or operating system, and
  317. @ifclear INSTALLONLY
  318. should be investigated and reported (@pxref{Bugs}).
  319. @end ifclear
  320. @ifset INSTALLONLY
  321. should be investigated and reported.
  322. @end ifset
  323.  
  324. Some commercial compilers fail to compile GNU CC because they have bugs
  325. or limitations.  For example, the Microsoft compiler is said to run out
  326. of macro space.  Some Ultrix compilers run out of expression space; then
  327. you need to break up the statement where the problem happens.
  328.  
  329. @item
  330. If you are building a cross-compiler, stop here.  @xref{Cross-Compiler}.
  331.  
  332. @cindex stage1
  333. @item
  334. Move the first-stage object files and executables into a subdirectory
  335. with this command:
  336.  
  337. @smallexample
  338. make stage1
  339. @end smallexample
  340.  
  341. The files are moved into a subdirectory named @file{stage1}.
  342. Once installation is complete, you may wish to delete these files
  343. with @code{rm -r stage1}.
  344.  
  345. @item
  346. If you have chosen a configuration for GNU CC which requires other GNU
  347. tools (such as GAS or the GNU linker) instead of the standard system
  348. tools, install the required tools in the @file{stage1} subdirectory
  349. under the names @file{as}, @file{ld} or whatever is appropriate.  This
  350. will enable the stage 1 compiler to find the proper tools in the
  351. following stage.
  352.  
  353. Alternatively, you can do subsequent compilation using a value of the
  354. @code{PATH} environment variable such that the necessary GNU tools come
  355. before the standard system tools.
  356.  
  357. @item
  358. Recompile the compiler with itself, with this command:
  359.  
  360. @smallexample
  361. make CC="stage1/xgcc -Bstage1/" CFLAGS="-g -O"
  362. @end smallexample
  363.  
  364. This is called making the stage 2 compiler.
  365.  
  366. The command shown above builds compilers for all the supported
  367. languages.  If you don't want them all, you can specify the languages to
  368. build by typing the argument @samp{LANGUAGES="@var{list}"}.  @var{list}
  369. should contain one or more words from the list @samp{c}, @samp{c++},
  370. @samp{objective-c}, and @samp{proto}.  Separate the words with spaces.
  371. @samp{proto} stands for the programs @code{protoize} and
  372. @code{unprotoize}; they are not a separate language, but you use
  373. @code{LANGUAGES} to enable or disable their installation.
  374.  
  375. If you are going to build the stage 3 compiler, then you might want to
  376. build only the C language in stage 2.
  377.  
  378. Once you have built the stage 2 compiler, if you are short of disk
  379. space, you can delete the subdirectory @file{stage1}.
  380.  
  381. On a 68000 or 68020 system lacking floating point hardware,
  382. unless you have selected a @file{tm.h} file that expects by default
  383. that there is no such hardware, do this instead:
  384.  
  385. @smallexample
  386. make CC="stage1/xgcc -Bstage1/" CFLAGS="-g -O -msoft-float"
  387. @end smallexample
  388.  
  389. @item
  390. If you wish to test the compiler by compiling it with itself one more
  391. time, install any other necessary GNU tools (such as GAS or the GNU
  392. linker) in the @file{stage2} subdirectory as you did in the
  393. @file{stage1} subdirectory, then do this:
  394.  
  395. @smallexample
  396. make stage2
  397. make CC="stage2/xgcc -Bstage2/" CFLAGS="-g -O" 
  398. @end smallexample
  399.  
  400. @noindent
  401. This is called making the stage 3 compiler.  Aside from the @samp{-B}
  402. option, the compiler options should be the same as when you made the
  403. stage 2 compiler.  But the @code{LANGUAGES} option need not be the
  404. same.  The command shown above builds compilers for all the supported
  405. languages; if you don't want them all, you can specify the languages to
  406. build by typing the argument @samp{LANGUAGES="@var{list}"}, as described
  407. above.
  408.  
  409. If you do not have to install any additional GNU tools, you may use the
  410. command
  411.  
  412. @smallexample
  413. make bootstrap LANGUAGES=@var{language-list} BOOT_CFLAGS=@var{option-list}
  414. @end smallexample
  415.  
  416. @noindent
  417. instead of making @file{stage1}, @file{stage2}, and performing
  418. the two compiler builds.
  419.  
  420. @item
  421. Then compare the latest object files with the stage 2 object
  422. files---they ought to be identical, aside from time stamps (if any).
  423.  
  424. On some systems, meaningful comparison of object files is impossible;
  425. they always appear ``different.''  This is currently true on Solaris and
  426. probably on all systems that use ELF object file format.  On some
  427. versions of Irix on SGI machines and OSF/1 on Alpha systems, you will
  428. not be able to compare the files without specifying @file{-save-temps};
  429. see the description of individual systems above to see if you get
  430. comparison failures.  You may have similar problems on other systems.
  431.  
  432. Use this command to compare the files:
  433.  
  434. @smallexample
  435. make compare
  436. @end smallexample
  437.  
  438. This will mention any object files that differ between stage 2 and stage
  439. 3.  Any difference, no matter how innocuous, indicates that the stage 2
  440. compiler has compiled GNU CC incorrectly, and is therefore a potentially
  441. @ifclear INSTALLONLY
  442. serious bug which you should investigate and report (@pxref{Bugs}).
  443. @end ifclear
  444. @ifset INSTALLONLY
  445. serious bug which you should investigate and report.
  446. @end ifset
  447.  
  448. If your system does not put time stamps in the object files, then this
  449. is a faster way to compare them (using the Bourne shell):
  450.  
  451. @smallexample
  452. for file in *.o; do
  453. cmp $file stage2/$file
  454. done
  455. @end smallexample
  456.  
  457. If you have built the compiler with the @samp{-mno-mips-tfile} option on
  458. MIPS machines, you will not be able to compare the files.
  459.  
  460. @item
  461. Build the Objective C library (if you have built the Objective C
  462. compiler).  Here is the command to do this:
  463.  
  464. @smallexample
  465. make objc-runtime CC="stage2/xgcc -Bstage2/" CFLAGS="-g -O"
  466. @end smallexample
  467.  
  468. @item
  469. Install the compiler driver, the compiler's passes and run-time support
  470. with @samp{make install}.  Use the same value for @code{CC},
  471. @code{CFLAGS} and @code{LANGUAGES} that you used when compiling the
  472. files that are being installed.  One reason this is necessary is that
  473. some versions of Make have bugs and recompile files gratuitously when
  474. you do this step.  If you use the same variable values, those files will
  475. be recompiled properly.
  476.  
  477. For example, if you have built the stage 2 compiler, you can use the
  478. following command:
  479.  
  480. @smallexample
  481. make install CC="stage2/xgcc -Bstage2/" CFLAGS="-g -O" LANGUAGES="@var{list}"
  482. @end smallexample
  483.  
  484. @noindent
  485. This copies the files @file{cc1}, @file{cpp} and @file{libgcc.a} to
  486. files @file{cc1}, @file{cpp} and @file{libgcc.a} in the directory
  487. @file{/usr/local/lib/gcc-lib/@var{target}/@var{version}}, which is where
  488. the compiler driver program looks for them.  Here @var{target} is the
  489. target machine type specified when you ran @file{configure}, and
  490. @var{version} is the version number of GNU CC.  This naming scheme
  491. permits various versions and/or cross-compilers to coexist.
  492.  
  493. This also copies the driver program @file{xgcc} into
  494. @file{/usr/local/bin/gcc}, so that it appears in typical execution
  495. search paths.
  496.  
  497. On some systems, this command causes recompilation of some files.  This
  498. is usually due to bugs in @code{make}.  You should either ignore this
  499. problem, or use GNU Make.
  500.  
  501. @cindex @code{alloca} and SunOs
  502. @strong{Warning: there is a bug in @code{alloca} in the Sun library.  To
  503. avoid this bug, be sure to install the executables of GNU CC that were
  504. compiled by GNU CC.  (That is, the executables from stage 2 or 3, not
  505. stage 1.)  They use @code{alloca} as a built-in function and never the
  506. one in the library.}
  507.  
  508. (It is usually better to install GNU CC executables from stage 2 or 3,
  509. since they usually run faster than the ones compiled with some other
  510. compiler.)
  511.  
  512. @item
  513. Install the Objective C library (if you are installing the Objective C
  514. compiler).  Here is the command to do this:
  515.  
  516. @smallexample
  517. make install-libobjc CC="stage2/xgcc -Bstage2/" CFLAGS="-g -O"
  518. @end smallexample
  519.  
  520. @item
  521. If you're going to use C++, it's likely that you need to also install
  522. the libg++ distribution.  It should be available from the same
  523. place where you got the GNU C distribution.  Just as GNU C does not
  524. distribute a C runtime library, it also does not include a C++ run-time
  525. library.  All I/O functionality, special class libraries, etc., are
  526. available in the libg++ distribution.
  527. @end enumerate
  528.  
  529. @node Configurations
  530. @section Configurations Supported by GNU CC
  531. @cindex configurations supported by GNU CC
  532.  
  533. Here are the possible CPU types:
  534.  
  535. @quotation
  536. @c gmicro, alliant, spur and tahoe omitted since they don't work.
  537. 1750a, a29k, alpha, arm, c@var{n}, clipper, dsp16xx, elxsi, h8300,
  538. hppa1.0, hppa1.1, i370, i386, i486, i860, i960, m68000, m68k, m88k,
  539. mips, ns32k, powerpc, pyramid, romp, rs6000, sh, sparc, sparclite,
  540. sparc64, vax, we32k.
  541. @end quotation
  542.  
  543. Here are the recognized company names.  As you can see, customary
  544. abbreviations are used rather than the longer official names.
  545.  
  546. @c What should be done about merlin, tek*, dolphin?
  547. @quotation
  548. acorn, alliant, altos, apollo, att, bull,
  549. cbm, convergent, convex, crds, dec, dg, dolphin,
  550. elxsi, encore, harris, hitachi, hp, ibm, intergraph, isi,
  551. mips, motorola, ncr, next, ns, omron, plexus,
  552. sequent, sgi, sony, sun, tti, unicom.
  553. @end quotation
  554.  
  555. The company name is meaningful only to disambiguate when the rest of
  556. the information supplied is insufficient.  You can omit it, writing
  557. just @samp{@var{cpu}-@var{system}}, if it is not needed.  For example,
  558. @samp{vax-ultrix4.2} is equivalent to @samp{vax-dec-ultrix4.2}.
  559.  
  560. Here is a list of system types:
  561.  
  562. @quotation
  563. 386bsd, aix, acis, amigados, aos, aout, bosx, bsd, clix, ctix, cxux,
  564. dgux, dynix, ebmon, elf, esix, freebsd, hms, genix, gnu, gnu/linux,
  565. hiux, hpux, iris, irix, isc, luna, lynxos, mach, minix, msdos, mvs,
  566. netbsd, newsos, nindy, ns, osf, osfrose, ptx, riscix, riscos, rtu, sco,
  567. solaris, sunos, sym, sysv, ultrix, unicos, uniplus, unos, vms, vxworks,
  568. xenix.
  569. @end quotation
  570.  
  571. @noindent
  572. You can omit the system type; then @file{configure} guesses the
  573. operating system from the CPU and company.
  574.  
  575. You can add a version number to the system type; this may or may not
  576. make a difference.  For example, you can write @samp{bsd4.3} or
  577. @samp{bsd4.4} to distinguish versions of BSD.  In practice, the version
  578. number is most needed for @samp{sysv3} and @samp{sysv4}, which are often
  579. treated differently.
  580.  
  581. If you specify an impossible combination such as @samp{i860-dg-vms},
  582. then you may get an error message from @file{configure}, or it may
  583. ignore part of the information and do the best it can with the rest.
  584. @file{configure} always prints the canonical name for the alternative
  585. that it used.  GNU CC does not support all possible alternatives.
  586.  
  587. Often a particular model of machine has a name.  Many machine names are
  588. recognized as aliases for CPU/company combinations.  Thus, the machine
  589. name @samp{sun3}, mentioned above, is an alias for @samp{m68k-sun}.
  590. Sometimes we accept a company name as a machine name, when the name is
  591. popularly used for a particular machine.  Here is a table of the known
  592. machine names:
  593.  
  594. @quotation
  595. 3300, 3b1, 3b@var{n}, 7300, altos3068, altos,
  596. apollo68, att-7300, balance,
  597. convex-c@var{n}, crds, decstation-3100,
  598. decstation, delta, encore,
  599. fx2800, gmicro, hp7@var{nn}, hp8@var{nn},
  600. hp9k2@var{nn}, hp9k3@var{nn}, hp9k7@var{nn},
  601. hp9k8@var{nn}, iris4d, iris, isi68,
  602. m3230, magnum, merlin, miniframe,
  603. mmax, news-3600, news800, news, next,
  604. pbd, pc532, pmax, powerpc, ps2, risc-news,
  605. rtpc, sun2, sun386i, sun386, sun3,
  606. sun4, symmetry, tower-32, tower.
  607. @end quotation 
  608.  
  609. @noindent
  610. Remember that a machine name specifies both the cpu type and the company
  611. name.
  612. If you want to install your own homemade configuration files, you can
  613. use @samp{local} as the company name to access them.  If you use 
  614. configuration @samp{@var{cpu}-local}, the configuration name
  615. without the cpu prefix 
  616. is used to form the configuration file names.
  617.  
  618. Thus, if you specify @samp{m68k-local}, configuration uses
  619. files @file{m68k.md}, @file{local.h}, @file{m68k.c},
  620. @file{xm-local.h}, @file{t-local}, and @file{x-local}, all in the
  621. directory @file{config/m68k}.
  622.  
  623. Here is a list of configurations that have special treatment or special
  624. things you must know:
  625.  
  626. @table @samp
  627. @item 1750a-*-*
  628. MIL-STD-1750A processors.
  629.  
  630. Starting with GCC 2.6.1, the MIL-STD-1750A cross configuration no longer
  631. supports the Tektronix Assembler, but instead produces output for
  632. @code{as1750}, an assembler/linker available under the GNU Public
  633. License for the 1750A. Contact @emph{okellogg@@salyko.cube.net} for more
  634. details on obtaining @samp{as1750}.  A similarly licensed simulator for
  635. the 1750A is available from same address.
  636.  
  637. You should ignore a fatal error during the building of libgcc (libgcc is
  638. not yet implemented for the 1750A.)
  639.  
  640. The @code{as1750} assembler requires the file @file{ms1750.inc}, which is
  641. found in the directory @file{config/1750a}.
  642.  
  643. GNU CC produced the same sections as the Fairchild F9450 C Compiler,
  644. namely:
  645.  
  646. @table @code
  647. @item NREL
  648. The program code section.
  649.  
  650. @item SREL
  651. The read/write (RAM) data section.
  652.  
  653. @item KREL
  654. The read-only (ROM) constants section.
  655.  
  656. @item IREL
  657. Initialization section (code to copy KREL to SREL).
  658. @end table
  659.  
  660. The smallest addressable unit is 16 bits (BITS_PER_UNIT is 16).  This
  661. means that type `char' is represented with a 16-bit word per character.
  662. The 1750A's "Load/Store Upper/Lower Byte" instructions are not used by
  663. GNU CC.
  664.  
  665. There is a problem with long argument lists to functions.  The compiler
  666. aborts if the sum of space needed by all arguments exceeds 14 words.
  667. This is because the arguments are passed in registers (R0..R13) not on
  668. the stack, and there is a problem with passing further arguments (i.e.
  669. beyond those in R0..R13) via the stack.
  670.  
  671. If efficiency is less important than using long argument lists, you
  672. can change the definition of the @code{FUNCTION_ARG} macro in
  673. @file{config/1750/1750a.h} to always return zero.  If you do that,
  674. GNU CC will pass all parameters on the stack.
  675.  
  676. @item alpha-*-osf1
  677. Systems using processors that implement the DEC Alpha architecture and
  678. are running the OSF/1 operating system, for example the DEC Alpha AXP
  679. systems.  (VMS on the Alpha is not currently supported by GNU CC.)
  680.  
  681. GNU CC writes a @samp{.verstamp} directive to the assembler output file
  682. unless it is built as a cross-compiler.  It gets the version to use from
  683. the system header file @file{/usr/include/stamp.h}.  If you install a
  684. new version of OSF/1, you should rebuild GCC to pick up the new version
  685. stamp.
  686.  
  687. Note that since the Alpha is a 64-bit architecture, cross-compilers from
  688. 32-bit machines will not generate code as efficient as that generated
  689. when the compiler is running on a 64-bit machine because many
  690. optimizations that depend on being able to represent a word on the
  691. target in an integral value on the host cannot be performed.  Building
  692. cross-compilers on the Alpha for 32-bit machines has only been tested in
  693. a few cases and may not work properly.
  694.  
  695. @code{make compare} may fail on old versions of OSF/1 unless you add
  696. @samp{-save-temps} to @code{CFLAGS}.  On these systems, the name of the
  697. assembler input file is stored in the object file, and that makes
  698. comparison fail if it differs between the @code{stage1} and
  699. @code{stage2} compilations.  The option @samp{-save-temps} forces a
  700. fixed name to be used for the assembler input file, instead of a
  701. randomly chosen name in @file{/tmp}.  Do not add @samp{-save-temps}
  702. unless the comparisons fail without that option.  If you add
  703. @samp{-save-temps}, you will have to manually delete the @samp{.i} and
  704. @samp{.s} files after each series of compilations.
  705.  
  706. GNU CC now supports both the native (ECOFF) debugging format used by DBX
  707. and GDB and an encapsulated STABS format for use only with GDB.  See the
  708. discussion of the @samp{--with-stabs} option of @file{configure} above
  709. for more information on these formats and how to select them.
  710.  
  711. There is a bug in DEC's assembler that produces incorrect line numbers
  712. for ECOFF format when the @samp{.align} directive is used.  To work
  713. around this problem, GNU CC will not emit such alignment directives
  714. while writing ECOFF format debugging information even if optimization is
  715. being performed.  Unfortunately, this has the very undesirable
  716. side-effect that code addresses when @samp{-O} is specified are
  717. different depending on whether or not @samp{-g} is also specified.
  718.  
  719. To avoid this behavior, specify @samp{-gstabs+} and use GDB instead of
  720. DBX.  DEC is now aware of this problem with the assembler and hopes to
  721. provide a fix shortly.
  722.  
  723. @item arm
  724. Advanced RISC Machines ARM-family processors.  These are often used in
  725. embedded applications.  There are no standard Unix configurations.
  726. This configuration corresponds to the basic instruction sequences and will
  727. produce a.out format object modules.
  728.  
  729. You may need to make a variant of the file @file{arm.h} for your particular
  730. configuration.
  731.  
  732. @item arm-*-riscix
  733. The ARM2 or ARM3 processor running RISC iX, Acorn's port of BSD Unix.  If
  734. you are running a version of RISC iX prior to 1.2 then you must specify
  735. the version number during configuration.  Note that the assembler 
  736. shipped with RISC iX does not support stabs debugging information; a
  737. new version of the assembler, with stabs support included, is now
  738. available from Acorn.
  739.  
  740. @item a29k
  741. AMD Am29k-family processors.  These are normally used in embedded
  742. applications.  There are no standard Unix configurations.
  743. This configuration
  744. corresponds to AMD's standard calling sequence and binary interface
  745. and is compatible with other 29k tools.  
  746.  
  747. You may need to make a variant of the file @file{a29k.h} for your
  748. particular configuration.
  749.  
  750. @item a29k-*-bsd
  751. AMD Am29050 used in a system running a variant of BSD Unix.
  752.  
  753. @item decstation-*
  754. DECstations can support three different personalities: Ultrix,
  755. DEC OSF/1, and OSF/rose.  To configure GCC for these platforms
  756. use the following configurations:
  757.  
  758. @table @samp
  759. @item decstation-ultrix
  760. Ultrix configuration.
  761.  
  762. @item decstation-osf1
  763. Dec's version of OSF/1.
  764.  
  765. @item decstation-osfrose
  766. Open Software Foundation reference port of OSF/1 which uses the
  767. OSF/rose object file format instead of ECOFF.  Normally, you
  768. would not select this configuration.
  769. @end table
  770.  
  771. The MIPS C compiler needs to be told to increase its table size
  772. for switch statements with the @samp{-Wf,-XNg1500} option in
  773. order to compile @file{cp/parse.c}.  If you use the @samp{-O2}
  774. optimization option, you also need to use @samp{-Olimit 3000}.
  775. Both of these options are automatically generated in the
  776. @file{Makefile} that the shell script @file{configure} builds.
  777. If you override the @code{CC} make variable and use the MIPS
  778. compilers, you may need to add @samp{-Wf,-XNg1500 -Olimit 3000}.
  779.  
  780. @item elxsi-elxsi-bsd
  781. The Elxsi's C compiler has known limitations that prevent it from
  782. compiling GNU C.  Please contact @code{mrs@@cygnus.com} for more details.
  783.  
  784. @item dsp16xx
  785. A port to the AT&T DSP1610 family of processors.
  786.  
  787. @ignore
  788. @item fx80
  789. Alliant FX/8 computer.  Note that the standard installed C compiler in
  790. Concentrix 5.0 has a bug which prevent it from compiling GNU CC
  791. correctly.  You can patch the compiler bug as follows:
  792.  
  793. @smallexample
  794. cp /bin/pcc ./pcc
  795. adb -w ./pcc - << EOF
  796. 15f6?w 6610
  797. EOF
  798. @end smallexample
  799.  
  800. Then you must use the @samp{-ip12} option when compiling GNU CC
  801. with the patched compiler, as shown here:
  802.  
  803. @smallexample
  804. make CC="./pcc -ip12" CFLAGS=-w
  805. @end smallexample
  806.  
  807. Note also that Alliant's version of DBX does not manage to work with the
  808. output from GNU CC.
  809. @end ignore
  810.  
  811. @item h8300-*-*
  812. The calling convention and structure layout has changed in release 2.6.
  813. All code must be recompiled.  The calling convention now passes the
  814. first three arguments in function calls in registers.  Structures are no
  815. longer a multiple of 2 bytes.
  816.   
  817. @item hppa*-*-*
  818. There are two variants of this CPU, called 1.0 and 1.1, which have
  819. different machine descriptions.  You must use the right one for your
  820. machine.  All 7@var{nn} machines and 8@var{n}7 machines use 1.1, while
  821. all other 8@var{nn} machines use 1.0.
  822.  
  823. The easiest way to handle this problem is to use @samp{configure
  824. hp@var{nnn}} or @samp{configure hp@var{nnn}-hpux}, where @var{nnn} is
  825. the model number of the machine.  Then @file{configure} will figure out
  826. if the machine is a 1.0 or 1.1.  Use @samp{uname -a} to find out the
  827. model number of your machine.
  828.  
  829. @samp{-g} does not work on HP-UX, since that system uses a peculiar
  830. debugging format which GNU CC does not know about.  However, @samp{-g}
  831. will work if you also use GAS and GDB in conjunction with GCC.  We
  832. highly recommend using GAS for all HP-PA configurations.
  833.  
  834. You should be using GAS-2.3 (or later) along with GDB-4.12 (or later).  These
  835. can be retrieved from all the traditional GNU ftp archive sites.  
  836.  
  837. Build GAS and install the resulting binary as:
  838.  
  839. @example
  840. /usr/local/lib/gcc-lib/@var{configuration}/@var{gccversion}/as
  841. @end example
  842.  
  843. @noindent
  844. where @var{configuration} is the configuration name (perhaps
  845. @samp{hp@var{nnn}-hpux}) and @var{gccversion} is the GNU CC version
  846. number.  Do this @emph{before} starting the build process, otherwise you will
  847. get errors from the HPUX assembler while building @file{libgcc2.a}.  The
  848. command 
  849.  
  850. @example
  851. make install-dir
  852. @end example
  853.  
  854. @noindent
  855. will create the necessary directory hierarchy so you can install GAS before
  856. building GCC.
  857.  
  858. To enable debugging, configure GNU CC with the @samp{--with-gnu-as} option
  859. before building.
  860.  
  861. It has been reported that GNU CC produces invalid assembly code for
  862. 1.1 machines running HP-UX 8.02 when using the HP assembler.  Typically
  863. the errors look like this:
  864. @example
  865. as: bug.s @@line#15 [err#1060]
  866.   Argument 0 or 2 in FARG upper
  867.          - lookahead = ARGW1=FR,RTNVAL=GR
  868. as: foo.s @@line#28 [err#1060]
  869.   Argument 0 or 2 in FARG upper
  870.          - lookahead = ARGW1=FR
  871. @end example
  872.  
  873. You can check the version of HP-UX you are running by executing the command
  874. @samp{uname -r}.   If you are indeed running HP-UX 8.02 on a PA and 
  875. using the HP assembler then configure GCC with "hp@var{nnn}-hpux8.02".
  876.  
  877. @item i370-*-*
  878. This port is very preliminary and has many known bugs.  We hope to
  879. have a higher-quality port for this machine soon.
  880.  
  881. @item i386-*-gnu/linux
  882. Bash-1.12 has a bug that causes configure to fail.  The symptom is that
  883. the c++ subdirectory, @file{cp}, is not configured.  Bash-1.14 and later
  884. work fine.
  885.  
  886. @item i386-*-sco
  887. Compilation with RCC is recommended.  Also, it may be a good idea to
  888. link with GNU malloc instead of the malloc that comes with the system.
  889.  
  890. @item i386-*-sco3.2.4
  891. Use this configuration for SCO release 3.2 version 4.
  892.  
  893. @item i386-*-isc
  894. It may be a good idea to link with GNU malloc instead of the malloc that
  895. comes with the system.
  896.  
  897. In ISC version 4.1, @file{sed} core dumps when building
  898. @file{deduced.h}.  Use the version of @file{sed} from version 4.0.
  899.  
  900. @item i386-*-esix
  901. It may be good idea to link with GNU malloc instead of the malloc that
  902. comes with the system.
  903.  
  904. @item i386-ibm-aix
  905. You need to use GAS version 2.1 or later, and and LD from
  906. GNU binutils version 2.2 or later.
  907.  
  908. @item i386-sequent-bsd
  909. Go to the Berkeley universe before compiling.  In addition, you probably
  910. need to create a file named @file{string.h} containing just one line:
  911. @samp{#include <strings.h>}.
  912.  
  913. @item i386-sequent-ptx1*
  914. Sequent DYNIX/ptx 1.x.
  915.  
  916. @item i386-sequent-ptx2*
  917. Sequent DYNIX/ptx 2.x.
  918.  
  919. @item i386-sun-sunos4
  920. You may find that you need another version of GNU CC to begin
  921. bootstrapping with, since the current version when built with the
  922. system's own compiler seems to get an infinite loop compiling part of
  923. @file{libgcc2.c}.  GNU CC version 2 compiled with GNU CC (any version)
  924. seems not to have this problem.
  925.  
  926. See @ref{Sun Install}, for information on installing GNU CC on Sun
  927. systems.
  928.  
  929. @item i860-intel-osf1
  930. This is the Paragon.
  931. @ifset INSTALLONLY
  932. If you have version 1.0 of the operating system, you need to take
  933. special steps to build GNU CC due to peculiarities of the system.  Newer
  934. system versions have no problem.  See the section `Installation Problems'
  935. in the GNU CC Manual.
  936. @end ifset
  937. @ifclear INSTALLONLY
  938. If you have version 1.0 of the operating system,
  939. see @ref{Installation Problems}, for special things you need to do to
  940. compensate for peculiarities in the system.
  941. @end ifclear
  942.  
  943. @item m68000-hp-bsd
  944. HP 9000 series 200 running BSD.  Note that the C compiler that comes
  945. with this system cannot compile GNU CC; contact @code{law@@cs.utah.edu}
  946. to get binaries of GNU CC for bootstrapping.
  947.  
  948. @item m68k-altos
  949. Altos 3068.  You must use the GNU assembler, linker and debugger.
  950. Also, you must fix a kernel bug.  Details in the file @file{README.ALTOS}.
  951.  
  952. @item m68k-att-sysv
  953. AT&T 3b1, a.k.a. 7300 PC.  Special procedures are needed to compile GNU
  954. CC with this machine's standard C compiler, due to bugs in that
  955. compiler.  You can bootstrap it more easily with
  956. previous versions of GNU CC if you have them.
  957.  
  958. Installing GNU CC on the 3b1 is difficult if you do not already have
  959. GNU CC running, due to bugs in the installed C compiler.  However,
  960. the following procedure might work.  We are unable to test it.
  961.  
  962. @enumerate
  963. @item
  964. Comment out the @samp{#include "config.h"} line on line 37 of
  965. @file{cccp.c} and do @samp{make cpp}.  This makes a preliminary version
  966. of GNU cpp.
  967.  
  968. @item
  969. Save the old @file{/lib/cpp} and copy the preliminary GNU cpp to that
  970. file name.
  971.  
  972. @item
  973. Undo your change in @file{cccp.c}, or reinstall the original version,
  974. and do @samp{make cpp} again.
  975.  
  976. @item
  977. Copy this final version of GNU cpp into @file{/lib/cpp}.
  978.  
  979. @findex obstack_free
  980. @item
  981. Replace every occurrence of @code{obstack_free} in the file
  982. @file{tree.c} with @code{_obstack_free}.
  983.  
  984. @item
  985. Run @code{make} to get the first-stage GNU CC.
  986.  
  987. @item
  988. Reinstall the original version of @file{/lib/cpp}.
  989.  
  990. @item
  991. Now you can compile GNU CC with itself and install it in the normal
  992. fashion.
  993. @end enumerate
  994.  
  995. @item m68k-bull-sysv
  996. Bull DPX/2 series 200 and 300 with BOS-2.00.45 up to BOS-2.01. GNU CC works 
  997. either with native assembler or GNU assembler. You can use
  998. GNU assembler with native coff generation by providing @samp{--with-gnu-as} to
  999. the configure script or use GNU assembler with dbx-in-coff encapsulation
  1000. by providing @samp{--with-gnu-as --stabs}. For any problem with native 
  1001. assembler or for availability of the DPX/2 port of GAS, contact 
  1002. @code{F.Pierresteguy@@frcl.bull.fr}.
  1003.  
  1004. @item m68k-crds-unox
  1005. Use @samp{configure unos} for building on Unos.
  1006.  
  1007. The Unos assembler is named @code{casm} instead of @code{as}.  For some
  1008. strange reason linking @file{/bin/as} to @file{/bin/casm} changes the
  1009. behavior, and does not work.  So, when installing GNU CC, you should
  1010. install the following script as @file{as} in the subdirectory where
  1011. the passes of GCC are installed:
  1012.  
  1013. @example
  1014. #!/bin/sh
  1015. casm $*
  1016. @end example
  1017.  
  1018. The default Unos library is named @file{libunos.a} instead of
  1019. @file{libc.a}.  To allow GNU CC to function, either change all
  1020. references to @samp{-lc} in @file{gcc.c} to @samp{-lunos} or link
  1021. @file{/lib/libc.a} to @file{/lib/libunos.a}.
  1022.  
  1023. @cindex @code{alloca}, for Unos
  1024. When compiling GNU CC with the standard compiler, to overcome bugs in
  1025. the support of @code{alloca}, do not use @samp{-O} when making stage 2.
  1026. Then use the stage 2 compiler with @samp{-O} to make the stage 3
  1027. compiler.  This compiler will have the same characteristics as the usual
  1028. stage 2 compiler on other systems.  Use it to make a stage 4 compiler
  1029. and compare that with stage 3 to verify proper compilation.
  1030.  
  1031. (Perhaps simply defining @code{ALLOCA} in @file{x-crds} as described in
  1032. the comments there will make the above paragraph superfluous.  Please
  1033. inform us of whether this works.)
  1034.  
  1035. Unos uses memory segmentation instead of demand paging, so you will need
  1036. a lot of memory.  5 Mb is barely enough if no other tasks are running.
  1037. If linking @file{cc1} fails, try putting the object files into a library
  1038. and linking from that library.
  1039.  
  1040. @item m68k-hp-hpux
  1041. HP 9000 series 300 or 400 running HP-UX.  HP-UX version 8.0 has a bug in
  1042. the assembler that prevents compilation of GNU CC.  To fix it, get patch
  1043. PHCO_4484 from HP.
  1044.  
  1045. In addition, if you wish to use gas @samp{--with-gnu-as} you must use
  1046. gas version 2.1 or later, and you must use the GNU linker version 2.1 or
  1047. later.  Earlier versions of gas relied upon a program which converted the
  1048. gas output into the native HP/UX format, but that program has not been
  1049. kept up to date.  gdb does not understand that native HP/UX format, so
  1050. you must use gas if you wish to use gdb.
  1051.  
  1052. @item m68k-sun
  1053. Sun 3.  We do not provide a configuration file to use the Sun FPA by
  1054. default, because programs that establish signal handlers for floating
  1055. point traps inherently cannot work with the FPA.
  1056.  
  1057. See @ref{Sun Install}, for information on installing GNU CC on Sun
  1058. systems.
  1059.  
  1060. @item m88k-*-svr3
  1061. Motorola m88k running the AT&T/Unisoft/Motorola V.3 reference port.
  1062. These systems tend to use the Green Hills C, revision 1.8.5, as the
  1063. standard C compiler.  There are apparently bugs in this compiler that
  1064. result in object files differences between stage 2 and stage 3.  If this
  1065. happens, make the stage 4 compiler and compare it to the stage 3
  1066. compiler.  If the stage 3 and stage 4 object files are identical, this
  1067. suggests you encountered a problem with the standard C compiler; the
  1068. stage 3 and 4 compilers may be usable.
  1069.  
  1070. It is best, however, to use an older version of GNU CC for bootstrapping
  1071. if you have one.
  1072.  
  1073. @item m88k-*-dgux
  1074. Motorola m88k running DG/UX.  To build 88open BCS native or cross
  1075. compilers on DG/UX, specify the configuration name as
  1076. @samp{m88k-*-dguxbcs} and build in the 88open BCS software development
  1077. environment.  To build ELF native or cross compilers on DG/UX, specify
  1078. @samp{m88k-*-dgux} and build in the DG/UX ELF development environment.
  1079. You set the software development environment by issuing
  1080. @samp{sde-target} command and specifying either @samp{m88kbcs} or
  1081. @samp{m88kdguxelf} as the operand.
  1082.  
  1083. If you do not specify a configuration name, @file{configure} guesses the
  1084. configuration based on the current software development environment.
  1085.  
  1086. @item m88k-tektronix-sysv3
  1087. Tektronix XD88 running UTekV 3.2e.  Do not turn on
  1088. optimization while building stage1 if you bootstrap with
  1089. the buggy Green Hills compiler.  Also, The bundled LAI
  1090. System V NFS is buggy so if you build in an NFS mounted
  1091. directory, start from a fresh reboot, or avoid NFS all together.
  1092. Otherwise you may have trouble getting clean comparisons
  1093. between stages.
  1094.  
  1095. @item mips-mips-bsd
  1096. MIPS machines running the MIPS operating system in BSD mode.  It's
  1097. possible that some old versions of the system lack the functions
  1098. @code{memcpy}, @code{memcmp}, and @code{memset}.  If your system lacks
  1099. these, you must remove or undo the definition of
  1100. @code{TARGET_MEM_FUNCTIONS} in @file{mips-bsd.h}.
  1101.  
  1102. The MIPS C compiler needs to be told to increase its table size
  1103. for switch statements with the @samp{-Wf,-XNg1500} option in
  1104. order to compile @file{cp/parse.c}.  If you use the @samp{-O2}
  1105. optimization option, you also need to use @samp{-Olimit 3000}.
  1106. Both of these options are automatically generated in the
  1107. @file{Makefile} that the shell script @file{configure} builds.
  1108. If you override the @code{CC} make variable and use the MIPS
  1109. compilers, you may need to add @samp{-Wf,-XNg1500 -Olimit 3000}.
  1110.  
  1111. @item mips-mips-riscos*
  1112. The MIPS C compiler needs to be told to increase its table size
  1113. for switch statements with the @samp{-Wf,-XNg1500} option in
  1114. order to compile @file{cp/parse.c}.  If you use the @samp{-O2}
  1115. optimization option, you also need to use @samp{-Olimit 3000}.
  1116. Both of these options are automatically generated in the
  1117. @file{Makefile} that the shell script @file{configure} builds.
  1118. If you override the @code{CC} make variable and use the MIPS
  1119. compilers, you may need to add @samp{-Wf,-XNg1500 -Olimit 3000}.
  1120.  
  1121. MIPS computers running RISC-OS can support four different
  1122. personalities: default, BSD 4.3, System V.3, and System V.4
  1123. (older versions of RISC-OS don't support V.4).  To configure GCC
  1124. for these platforms use the following configurations:
  1125.  
  1126. @table @samp
  1127. @item mips-mips-riscos@code{rev}
  1128. Default configuration for RISC-OS, revision @code{rev}.
  1129.  
  1130. @item mips-mips-riscos@code{rev}bsd
  1131. BSD 4.3 configuration for RISC-OS, revision @code{rev}.
  1132.  
  1133. @item mips-mips-riscos@code{rev}sysv4
  1134. System V.4 configuration for RISC-OS, revision @code{rev}.
  1135.  
  1136. @item mips-mips-riscos@code{rev}sysv
  1137. System V.3 configuration for RISC-OS, revision @code{rev}.
  1138. @end table
  1139.  
  1140. The revision @code{rev} mentioned above is the revision of
  1141. RISC-OS to use.  You must reconfigure GCC when going from a
  1142. RISC-OS revision 4 to RISC-OS revision 5.  This has the effect of
  1143. avoiding a linker
  1144. @ifclear INSTALLONLY
  1145. bug (see @ref{Installation Problems}, for more details).
  1146. @end ifclear
  1147. @ifset INSTALLONLY
  1148. bug.
  1149. @end ifset
  1150.  
  1151. @item mips-sgi-*
  1152. In order to compile GCC on an SGI running IRIX 4, the "c.hdr.lib"
  1153. option must be installed from the CD-ROM supplied from Silicon Graphics.
  1154. This is found on the 2nd CD in release 4.0.1.
  1155.  
  1156. @code{make compare} may fail on version 5 of IRIX unless you add
  1157. @samp{-save-temps} to @code{CFLAGS}.  On these systems, the name of the
  1158. assembler input file is stored in the object file, and that makes
  1159. comparison fail if it differs between the @code{stage1} and
  1160. @code{stage2} compilations.  The option @samp{-save-temps} forces a
  1161. fixed name to be used for the assembler input file, instead of a
  1162. randomly chosen name in @file{/tmp}.  Do not add @samp{-save-temps}
  1163. unless the comparisons fail without that option.  If you do you
  1164. @samp{-save-temps}, you will have to manually delete the @samp{.i} and
  1165. @samp{.s} files after each series of compilations.
  1166.  
  1167. The MIPS C compiler needs to be told to increase its table size
  1168. for switch statements with the @samp{-Wf,-XNg1500} option in
  1169. order to compile @file{cp/parse.c}.  If you use the @samp{-O2}
  1170. optimization option, you also need to use @samp{-Olimit 3000}.
  1171. Both of these options are automatically generated in the
  1172. @file{Makefile} that the shell script @file{configure} builds.
  1173. If you override the @code{CC} make variable and use the MIPS
  1174. compilers, you may need to add @samp{-Wf,-XNg1500 -Olimit 3000}.
  1175.  
  1176. On Irix version 4.0.5F, and perhaps on some other versions as well,
  1177. there is an assembler bug that reorders instructions incorrectly.  To
  1178. work around it, specify the target configuration
  1179. @samp{mips-sgi-irix4loser}.  This configuration inhibits assembler
  1180. optimization.
  1181.  
  1182. In a compiler configured with target @samp{mips-sgi-irix4}, you can turn
  1183. off assembler optimization by using the @samp{-noasmopt} option.  This
  1184. compiler option passes the option @samp{-O0} to the assembler, to
  1185. inhibit reordering.
  1186.  
  1187. The @samp{-noasmopt} option can be useful for testing whether a problem
  1188. is due to erroneous assembler reordering.  Even if a problem does not go
  1189. away with @samp{-noasmopt}, it may still be due to assembler
  1190. reordering---perhaps GNU CC itself was miscompiled as a result.
  1191.  
  1192. To enable debugging under Irix 5, you must use GNU as 2.5 or later,
  1193. and use the --with-gnu-as configure option when configuring gcc.
  1194. GNU as is distributed as part of the binutils package.  
  1195.  
  1196. @item mips-sony-sysv
  1197. Sony MIPS NEWS.  This works in NEWSOS 5.0.1, but not in 5.0.2 (which
  1198. uses ELF instead of COFF).  Support for 5.0.2 will probably be provided
  1199. soon by volunteers.  In particular, the linker does not like the
  1200. code generated by GCC when shared libraries are linked in.
  1201.  
  1202. @item ns32k-encore
  1203. Encore ns32000 system.  Encore systems are supported only under BSD.
  1204.  
  1205. @item ns32k-*-genix
  1206. National Semiconductor ns32000 system.  Genix has bugs in @code{alloca}
  1207. and @code{malloc}; you must get the compiled versions of these from GNU
  1208. Emacs.
  1209.  
  1210. @item ns32k-sequent
  1211. Go to the Berkeley universe before compiling.  In addition, you probably
  1212. need to create a file named @file{string.h} containing just one line:
  1213. @samp{#include <strings.h>}.
  1214.  
  1215. @item ns32k-utek
  1216. UTEK ns32000 system (``merlin'').  The C compiler that comes with this
  1217. system cannot compile GNU CC; contact @samp{tektronix!reed!mason} to get
  1218. binaries of GNU CC for bootstrapping.
  1219.  
  1220. @item romp-*-aos
  1221. @itemx romp-*-mach
  1222. The only operating systems supported for the IBM RT PC are AOS and
  1223. MACH.  GNU CC does not support AIX running on the RT.  We recommend you
  1224. compile GNU CC with an earlier version of itself; if you compile GNU CC
  1225. with @code{hc}, the Metaware compiler, it will work, but you will get
  1226. mismatches between the stage 2 and stage 3 compilers in various files.
  1227. These errors are minor differences in some floating-point constants and
  1228. can be safely ignored; the stage 3 compiler is correct.
  1229.  
  1230. @item rs6000-*-aix
  1231. @itemx powerpc-*-aix
  1232. Various early versions of each release of the IBM XLC compiler will not
  1233. bootstrap GNU CC.  Symptoms include differences between the stage2 and
  1234. stage3 object files, and errors when compiling @file{libgcc.a} or
  1235. @file{enquire}.  Known problematic releases include: xlc-1.2.1.8,
  1236. xlc-1.3.0.0 (distributed with AIX 3.2.5), and xlc-1.3.0.19.  Both
  1237. xlc-1.2.1.28 and xlc-1.3.0.24 (PTF 432238) are known to produce working
  1238. versions of GNU CC, but most other recent releases correctly bootstrap
  1239. GNU CC.  Also, releases of AIX prior to AIX 3.2.4 include a version of
  1240. the IBM assembler which does not accept debugging directives: assembler
  1241. updates are available as PTFs.  See the file @file{README.RS6000} for
  1242. more details on both of these problems.
  1243.  
  1244. Only AIX is supported on the PowerPC.  GNU CC does not yet support the
  1245. 64-bit PowerPC instructions.
  1246.  
  1247. Objective C does not work on this architecture.
  1248.  
  1249. AIX on the RS/6000 provides support (NLS) for environments outside of
  1250. the United States.  Compilers and assemblers use NLS to support
  1251. locale-specific representations of various objects including
  1252. floating-point numbers ("." vs "," for separating decimal fractions).
  1253. There have been problems reported where the library linked with GNU CC
  1254. does not produce the same floating-point formats that the assembler
  1255. accepts.  If you have this problem, set the LANG environment variable to
  1256. "C" or "En_US".
  1257.  
  1258. @item vax-dec-ultrix
  1259. Don't try compiling with Vax C (@code{vcc}).  It produces incorrect code
  1260. in some cases (for example, when @code{alloca} is used).
  1261.  
  1262. Meanwhile, compiling @file{cp/parse.c} with pcc does not work because of
  1263. an internal table size limitation in that compiler.  To avoid this
  1264. problem, compile just the GNU C compiler first, and use it to recompile 
  1265. building all the languages that you want to run.
  1266.  
  1267. @item sparc-sun-*
  1268. See @ref{Sun Install}, for information on installing GNU CC on Sun
  1269. systems.
  1270.  
  1271. @item vax-dec-vms
  1272. See @ref{VMS Install}, for details on how to install GNU CC on VMS.
  1273.  
  1274. @item we32k-*-*
  1275. These computers are also known as the 3b2, 3b5, 3b20 and other similar
  1276. names.  (However, the 3b1 is actually a 68000; see
  1277. @ref{Configurations}.)
  1278.  
  1279. Don't use @samp{-g} when compiling with the system's compiler.  The
  1280. system's linker seems to be unable to handle such a large program with
  1281. debugging information.
  1282.  
  1283. The system's compiler runs out of capacity when compiling @file{stmt.c}
  1284. in GNU CC.  You can work around this by building @file{cpp} in GNU CC
  1285. first, then use that instead of the system's preprocessor with the
  1286. system's C compiler to compile @file{stmt.c}.  Here is how:
  1287.  
  1288. @example
  1289. mv /lib/cpp /lib/cpp.att
  1290. cp cpp /lib/cpp.gnu
  1291. echo '/lib/cpp.gnu -traditional $@{1+"$@@"@}' > /lib/cpp
  1292. chmod +x /lib/cpp
  1293. @end example
  1294.  
  1295. The system's compiler produces bad code for some of the GNU CC
  1296. optimization files.  So you must build the stage 2 compiler without
  1297. optimization.  Then build a stage 3 compiler with optimization.
  1298. That executable should work.  Here are the necessary commands:
  1299.  
  1300. @example
  1301. make LANGUAGES=c CC=stage1/xgcc CFLAGS="-Bstage1/ -g"
  1302. make stage2
  1303. make CC=stage2/xgcc CFLAGS="-Bstage2/ -g -O"
  1304. @end example
  1305.  
  1306. You may need to raise the ULIMIT setting to build a C++ compiler,
  1307. as the file @file{cc1plus} is larger than one megabyte.
  1308. @end table
  1309.  
  1310. @node Other Dir
  1311. @section Compilation in a Separate Directory
  1312. @cindex other directory, compilation in
  1313. @cindex compilation in a separate directory
  1314. @cindex separate directory, compilation in
  1315.  
  1316. If you wish to build the object files and executables in a directory
  1317. other than the one containing the source files, here is what you must
  1318. do differently:
  1319.  
  1320. @enumerate
  1321. @item
  1322. Make sure you have a version of Make that supports the @code{VPATH}
  1323. feature.  (GNU Make supports it, as do Make versions on most BSD
  1324. systems.)
  1325.  
  1326. @item
  1327. If you have ever run @file{configure} in the source directory, you must undo
  1328. the configuration.  Do this by running:
  1329.  
  1330. @example
  1331. make distclean
  1332. @end example
  1333.  
  1334. @item
  1335. Go to the directory in which you want to build the compiler before
  1336. running @file{configure}:
  1337.  
  1338. @example
  1339. mkdir gcc-sun3
  1340. cd gcc-sun3
  1341. @end example
  1342.  
  1343. On systems that do not support symbolic links, this directory must be
  1344. on the same file system as the source code directory.
  1345.  
  1346. @item
  1347. Specify where to find @file{configure} when you run it:
  1348.  
  1349. @example
  1350. ../gcc/configure @dots{}
  1351. @end example
  1352.  
  1353. This also tells @code{configure} where to find the compiler sources;
  1354. @code{configure} takes the directory from the file name that was used to
  1355. invoke it.  But if you want to be sure, you can specify the source
  1356. directory with the @samp{--srcdir} option, like this:
  1357.  
  1358. @example
  1359. ../gcc/configure --srcdir=../gcc @var{other options}
  1360. @end example
  1361.  
  1362. The directory you specify with @samp{--srcdir} need not be the same
  1363. as the one that @code{configure} is found in.
  1364. @end enumerate
  1365.  
  1366. Now, you can run @code{make} in that directory.  You need not repeat the
  1367. configuration steps shown above, when ordinary source files change.  You
  1368. must, however, run @code{configure} again when the configuration files
  1369. change, if your system does not support symbolic links.
  1370.  
  1371. @node Cross-Compiler
  1372. @section Building and Installing a Cross-Compiler
  1373. @cindex cross-compiler, installation
  1374.  
  1375. GNU CC can function as a cross-compiler for many machines, but not all.
  1376.  
  1377. @itemize @bullet
  1378. @item
  1379. Cross-compilers for the Mips as target using the Mips assembler
  1380. currently do not work, because the auxiliary programs
  1381. @file{mips-tdump.c} and @file{mips-tfile.c} can't be compiled on
  1382. anything but a Mips.  It does work to cross compile for a Mips
  1383. if you use the GNU assembler and linker.
  1384.  
  1385. @item
  1386. Cross-compilers between machines with different floating point formats
  1387. have not all been made to work.  GNU CC now has a floating point
  1388. emulator with which these can work, but each target machine description
  1389. needs to be updated to take advantage of it.
  1390.  
  1391. @item 
  1392. Cross-compilation between machines of different word sizes is
  1393. somewhat problematic and sometimes does not work.
  1394. @end itemize
  1395.  
  1396. Since GNU CC generates assembler code, you probably need a
  1397. cross-assembler that GNU CC can run, in order to produce object files.
  1398. If you want to link on other than the target machine, you need a
  1399. cross-linker as well.  You also need header files and libraries suitable
  1400. for the target machine that you can install on the host machine.
  1401.  
  1402. @menu
  1403. * Steps of Cross::      Using a cross-compiler involves several steps
  1404.                           that may be carried out on different machines.
  1405. * Configure Cross::     Configuring a cross-compiler.
  1406. * Tools and Libraries:: Where to put the linker and assembler, and the C library.
  1407. * Cross Headers::       Finding and installing header files
  1408.                           for a cross-compiler.
  1409. * Cross Runtime::       Supplying arithmetic runtime routines (@file{libgcc1.a}).
  1410. * Build Cross::         Actually compiling the cross-compiler.
  1411. @end menu
  1412.  
  1413. @node Steps of Cross
  1414. @subsection Steps of Cross-Compilation
  1415.  
  1416. To compile and run a program using a cross-compiler involves several
  1417. steps:
  1418.  
  1419. @itemize @bullet
  1420. @item
  1421. Run the cross-compiler on the host machine to produce assembler files
  1422. for the target machine.  This requires header files for the target
  1423. machine.
  1424.  
  1425. @item
  1426. Assemble the files produced by the cross-compiler.  You can do this
  1427. either with an assembler on the target machine, or with a
  1428. cross-assembler on the host machine.
  1429.  
  1430. @item
  1431. Link those files to make an executable.  You can do this either with a
  1432. linker on the target machine, or with a cross-linker on the host
  1433. machine.  Whichever machine you use, you need libraries and certain
  1434. startup files (typically @file{crt@dots{}.o}) for the target machine.
  1435. @end itemize
  1436.  
  1437. It is most convenient to do all of these steps on the same host machine,
  1438. since then you can do it all with a single invocation of GNU CC.  This
  1439. requires a suitable cross-assembler and cross-linker.  For some targets,
  1440. the GNU assembler and linker are available.
  1441.  
  1442. @node Configure Cross
  1443. @subsection Configuring a Cross-Compiler
  1444.  
  1445. To build GNU CC as a cross-compiler, you start out by running
  1446. @file{configure}.  Use the @samp{--target=@var{target}} to specify the
  1447. target type.  If @file{configure} was unable to correctly identify the
  1448. system you are running on, also specify the @samp{--build=@var{build}}
  1449. option.  For example, here is how to configure for a cross-compiler that
  1450. produces code for an HP 68030 system running BSD on a system that
  1451. @file{configure} can correctly identify:
  1452.  
  1453. @smallexample
  1454. ./configure --target=m68k-hp-bsd4.3
  1455. @end smallexample
  1456.  
  1457. @node Tools and Libraries
  1458. @subsection Tools and Libraries for a Cross-Compiler
  1459.  
  1460. If you have a cross-assembler and cross-linker available, you should
  1461. install them now.  Put them in the directory
  1462. @file{/usr/local/@var{target}/bin}.  Here is a table of the tools
  1463. you should put in this directory:
  1464.  
  1465. @table @file
  1466. @item as
  1467. This should be the cross-assembler.
  1468.  
  1469. @item ld
  1470. This should be the cross-linker.
  1471.  
  1472. @item ar
  1473. This should be the cross-archiver: a program which can manipulate
  1474. archive files (linker libraries) in the target machine's format.
  1475.  
  1476. @item ranlib
  1477. This should be a program to construct a symbol table in an archive file.
  1478. @end table
  1479.  
  1480. The installation of GNU CC will find these programs in that directory,
  1481. and copy or link them to the proper place to for the cross-compiler to
  1482. find them when run later.
  1483.  
  1484. The easiest way to provide these files is to build the Binutils package
  1485. and GAS.  Configure them with the same @samp{--host} and @samp{--target}
  1486. options that you use for configuring GNU CC, then build and install
  1487. them.  They install their executables automatically into the proper
  1488. directory.  Alas, they do not support all the targets that GNU CC
  1489. supports.
  1490.  
  1491. If you want to install libraries to use with the cross-compiler, such as
  1492. a standard C library, put them in the directory
  1493. @file{/usr/local/@var{target}/lib}; installation of GNU CC copies all
  1494. all the files in that subdirectory into the proper place for GNU CC to
  1495. find them and link with them.  Here's an example of copying some
  1496. libraries from a target machine:
  1497.  
  1498. @example
  1499. ftp @var{target-machine}
  1500. lcd /usr/local/@var{target}/lib
  1501. cd /lib
  1502. get libc.a
  1503. cd /usr/lib
  1504. get libg.a
  1505. get libm.a
  1506. quit
  1507. @end example
  1508.  
  1509. @noindent
  1510. The precise set of libraries you'll need, and their locations on
  1511. the target machine, vary depending on its operating system.
  1512.  
  1513. @cindex start files
  1514. Many targets require ``start files'' such as @file{crt0.o} and
  1515. @file{crtn.o} which are linked into each executable; these too should be
  1516. placed in @file{/usr/local/@var{target}/lib}.  There may be several
  1517. alternatives for @file{crt0.o}, for use with profiling or other
  1518. compilation options.  Check your target's definition of
  1519. @code{STARTFILE_SPEC} to find out what start files it uses.
  1520. Here's an example of copying these files from a target machine:
  1521.  
  1522. @example
  1523. ftp @var{target-machine}
  1524. lcd /usr/local/@var{target}/lib
  1525. prompt
  1526. cd /lib
  1527. mget *crt*.o
  1528. cd /usr/lib
  1529. mget *crt*.o
  1530. quit
  1531. @end example
  1532.  
  1533. @node Cross Runtime
  1534. @subsection @file{libgcc.a} and Cross-Compilers
  1535.  
  1536. Code compiled by GNU CC uses certain runtime support functions
  1537. implicitly.  Some of these functions can be compiled successfully with
  1538. GNU CC itself, but a few cannot be.  These problem functions are in the
  1539. source file @file{libgcc1.c}; the library made from them is called
  1540. @file{libgcc1.a}.
  1541.  
  1542. When you build a native compiler, these functions are compiled with some
  1543. other compiler--the one that you use for bootstrapping GNU CC.
  1544. Presumably it knows how to open code these operations, or else knows how
  1545. to call the run-time emulation facilities that the machine comes with.
  1546. But this approach doesn't work for building a cross-compiler.  The
  1547. compiler that you use for building knows about the host system, not the
  1548. target system.
  1549.  
  1550. So, when you build a cross-compiler you have to supply a suitable
  1551. library @file{libgcc1.a} that does the job it is expected to do.
  1552.  
  1553. To compile @file{libgcc1.c} with the cross-compiler itself does not
  1554. work.  The functions in this file are supposed to implement arithmetic
  1555. operations that GNU CC does not know how to open code, for your target
  1556. machine.  If these functions are compiled with GNU CC itself, they 
  1557. will compile into infinite recursion.
  1558.  
  1559. On any given target, most of these functions are not needed.  If GNU CC
  1560. can open code an arithmetic operation, it will not call these functions
  1561. to perform the operation.  It is possible that on your target machine,
  1562. none of these functions is needed.  If so, you can supply an empty
  1563. library as @file{libgcc1.a}.
  1564.  
  1565. Many targets need library support only for multiplication and division.
  1566. If you are linking with a library that contains functions for
  1567. multiplication and division, you can tell GNU CC to call them directly
  1568. by defining the macros @code{MULSI3_LIBCALL}, and the like.  These
  1569. macros need to be defined in the target description macro file.  For
  1570. some targets, they are defined already.  This may be sufficient to 
  1571. avoid the need for libgcc1.a; if so, you can supply an empty library.
  1572.  
  1573. Some targets do not have floating point instructions; they need other
  1574. functions in @file{libgcc1.a}, which do floating arithmetic.
  1575. Recent versions of GNU CC have a file which emulates floating point.
  1576. With a certain amount of work, you should be able to construct a 
  1577. floating point emulator that can be used as @file{libgcc1.a}.  Perhaps
  1578. future versions will contain code to do this automatically and
  1579. conveniently.  That depends on whether someone wants to implement it.
  1580.  
  1581. If your target system has another C compiler, you can configure GNU CC
  1582. as a native compiler on that machine, build just @file{libgcc1.a} with
  1583. @samp{make libgcc1.a} on that machine, and use the resulting file with
  1584. the cross-compiler.  To do this, execute the following on the target
  1585. machine:
  1586.  
  1587. @example
  1588. cd @var{target-build-dir}
  1589. ./configure --host=sparc --target=sun3
  1590. make libgcc1.a
  1591. @end example
  1592.  
  1593. @noindent
  1594. And then this on the host machine:
  1595.  
  1596. @example
  1597. ftp @var{target-machine}
  1598. binary
  1599. cd @var{target-build-dir}
  1600. get libgcc1.a
  1601. quit
  1602. @end example
  1603.  
  1604. Another way to provide the functions you need in @file{libgcc1.a} is to
  1605. define the appropriate @code{perform_@dots{}} macros for those
  1606. functions.  If these definitions do not use the C arithmetic operators
  1607. that they are meant to implement, you should be able to compile them
  1608. with the cross-compiler you are building.  (If these definitions already
  1609. exist for your target file, then you are all set.)
  1610.  
  1611. To build @file{libgcc1.a} using the perform macros, use
  1612. @samp{LIBGCC1=libgcc1.a OLDCC=./xgcc} when building the compiler.
  1613. Otherwise, you should place your replacement library under the name
  1614. @file{libgcc1.a} in the directory in which you will build the
  1615. cross-compiler, before you run @code{make}.
  1616.  
  1617. @node Cross Headers
  1618. @subsection Cross-Compilers and Header Files
  1619.  
  1620. If you are cross-compiling a standalone program or a program for an
  1621. embedded system, then you may not need any header files except the few
  1622. that are part of GNU CC (and those of your program).  However, if you
  1623. intend to link your program with a standard C library such as
  1624. @file{libc.a}, then you probably need to compile with the header files
  1625. that go with the library you use.
  1626.  
  1627. The GNU C compiler does not come with these files, because (1) they are
  1628. system-specific, and (2) they belong in a C library, not in a compiler.
  1629.  
  1630. If the GNU C library supports your target machine, then you can get the
  1631. header files from there (assuming you actually use the GNU library when
  1632. you link your program).
  1633.  
  1634. If your target machine comes with a C compiler, it probably comes with
  1635. suitable header files also.  If you make these files accessible from the host
  1636. machine, the cross-compiler can use them also.
  1637.  
  1638. Otherwise, you're on your own in finding header files to use when
  1639. cross-compiling.
  1640.  
  1641. When you have found suitable header files, put them in
  1642. @file{/usr/local/@var{target}/include}, before building the cross
  1643. compiler.  Then installation will run fixincludes properly and install
  1644. the corrected versions of the header files where the compiler will use
  1645. them.
  1646.  
  1647. Provide the header files before you build the cross-compiler, because
  1648. the build stage actually runs the cross-compiler to produce parts of
  1649. @file{libgcc.a}.  (These are the parts that @emph{can} be compiled with
  1650. GNU CC.)  Some of them need suitable header files.
  1651.  
  1652. Here's an example showing how to copy the header files from a target
  1653. machine.  On the target machine, do this:
  1654.  
  1655. @example
  1656. (cd /usr/include; tar cf - .) > tarfile
  1657. @end example
  1658.  
  1659. Then, on the host machine, do this:
  1660.  
  1661. @example
  1662. ftp @var{target-machine}
  1663. lcd /usr/local/@var{target}/include
  1664. get tarfile
  1665. quit
  1666. tar xf tarfile
  1667. @end example
  1668.  
  1669. @node Build Cross
  1670. @subsection Actually Building the Cross-Compiler
  1671.  
  1672. Now you can proceed just as for compiling a single-machine compiler
  1673. through the step of building stage 1.  If you have not provided some
  1674. sort of @file{libgcc1.a}, then compilation will give up at the point
  1675. where it needs that file, printing a suitable error message.  If you
  1676. do provide @file{libgcc1.a}, then building the compiler will automatically
  1677. compile and link a test program called @file{cross-test}; if you get
  1678. errors in the linking, it means that not all of the necessary routines
  1679. in @file{libgcc1.a} are available.
  1680.  
  1681. If you are making a cross-compiler for an embedded system, and there is
  1682. no @file{stdio.h} header for it, then the compilation of @file{enquire}
  1683. will probably fail.  The job of @file{enquire} is to run on the target
  1684. machine and figure out by experiment the nature of its floating point
  1685. representation.  @file{enquire} records its findings in the header file
  1686. @file{float.h}.  If you can't produce this file by running
  1687. @file{enquire} on the target machine, then you will need to come up with
  1688. a suitable @file{float.h} in some other way (or else, avoid using it in
  1689. your programs).
  1690.  
  1691. Do not try to build stage 2 for a cross-compiler.  It doesn't work to
  1692. rebuild GNU CC as a cross-compiler using the cross-compiler, because
  1693. that would produce a program that runs on the target machine, not on the
  1694. host.  For example, if you compile a 386-to-68030 cross-compiler with
  1695. itself, the result will not be right either for the 386 (because it was
  1696. compiled into 68030 code) or for the 68030 (because it was configured
  1697. for a 386 as the host).  If you want to compile GNU CC into 68030 code,
  1698. whether you compile it on a 68030 or with a cross-compiler on a 386, you
  1699. must specify a 68030 as the host when you configure it.
  1700.  
  1701. To install the cross-compiler, use @samp{make install}, as usual.
  1702.  
  1703. @node Sun Install
  1704. @section Installing GNU CC on the Sun
  1705. @cindex Sun installation
  1706. @cindex installing GNU CC on the Sun
  1707.  
  1708. On Solaris (version 2.1), do not use the linker or other tools in
  1709. @file{/usr/ucb} to build GNU CC.  Use @code{/usr/ccs/bin}.
  1710.  
  1711. Make sure the environment variable @code{FLOAT_OPTION} is not set when
  1712. you compile @file{libgcc.a}.  If this option were set to @code{f68881}
  1713. when @file{libgcc.a} is compiled, the resulting code would demand to be
  1714. linked with a special startup file and would not link properly without
  1715. special pains.
  1716.  
  1717. @cindex @code{alloca}, for SunOs
  1718. There is a bug in @code{alloca} in certain versions of the Sun library.
  1719. To avoid this bug, install the binaries of GNU CC that were compiled by
  1720. GNU CC.  They use @code{alloca} as a built-in function and never the one
  1721. in the library.
  1722.  
  1723. Some versions of the Sun compiler crash when compiling GNU CC.  The
  1724. problem is a segmentation fault in cpp.  This problem seems to be due to
  1725. the bulk of data in the environment variables.  You may be able to avoid
  1726. it by using the following command to compile GNU CC with Sun CC:
  1727.  
  1728. @example
  1729. make CC="TERMCAP=x OBJS=x LIBFUNCS=x STAGESTUFF=x cc"
  1730. @end example
  1731.  
  1732. @node VMS Install
  1733. @section Installing GNU CC on VMS
  1734. @cindex VMS installation
  1735. @cindex installing GNU CC on VMS
  1736.  
  1737. The VMS version of GNU CC is distributed in a backup saveset containing
  1738. both source code and precompiled binaries.
  1739.  
  1740. To install the @file{gcc} command so you can use the compiler easily, in
  1741. the same manner as you use the VMS C compiler, you must install the VMS CLD
  1742. file for GNU CC as follows:
  1743.  
  1744. @enumerate
  1745. @item
  1746. Define the VMS logical names @samp{GNU_CC} and @samp{GNU_CC_INCLUDE}
  1747. to point to the directories where the GNU CC executables
  1748. (@file{gcc-cpp.exe}, @file{gcc-cc1.exe}, etc.) and the C include files are
  1749. kept respectively.  This should be done with the commands:@refill
  1750.  
  1751. @smallexample
  1752. $ assign /system /translation=concealed -
  1753.   disk:[gcc.] gnu_cc
  1754. $ assign /system /translation=concealed -
  1755.   disk:[gcc.include.] gnu_cc_include
  1756. @end smallexample
  1757.  
  1758. @noindent
  1759. with the appropriate disk and directory names.  These commands can be
  1760. placed in your system startup file so they will be executed whenever
  1761. the machine is rebooted.  You may, if you choose, do this via the
  1762. @file{GCC_INSTALL.COM} script in the @file{[GCC]} directory.
  1763.  
  1764. @item
  1765. Install the @file{GCC} command with the command line:
  1766.  
  1767. @smallexample
  1768. $ set command /table=sys$common:[syslib]dcltables -
  1769.   /output=sys$common:[syslib]dcltables gnu_cc:[000000]gcc
  1770. $ install replace sys$common:[syslib]dcltables
  1771. @end smallexample
  1772.  
  1773. @item
  1774. To install the help file, do the following:
  1775.  
  1776. @smallexample
  1777. $ library/help sys$library:helplib.hlb gcc.hlp
  1778. @end smallexample
  1779.  
  1780. @noindent
  1781. Now you can invoke the compiler with a command like @samp{gcc /verbose
  1782. file.c}, which is equivalent to the command @samp{gcc -v -c file.c} in
  1783. Unix.
  1784. @end enumerate
  1785.  
  1786. If you wish to use GNU C++ you must first install GNU CC, and then
  1787. perform the following steps:
  1788.  
  1789. @enumerate
  1790. @item
  1791. Define the VMS logical name @samp{GNU_GXX_INCLUDE} to point to the
  1792. directory where the preprocessor will search for the C++ header files.
  1793. This can be done with the command:@refill
  1794.  
  1795. @smallexample
  1796. $ assign /system /translation=concealed -
  1797.   disk:[gcc.gxx_include.] gnu_gxx_include
  1798. @end smallexample
  1799.  
  1800. @noindent
  1801. with the appropriate disk and directory name.  If you are going to be
  1802. using libg++, this is where the libg++ install procedure will install
  1803. the libg++ header files.
  1804.  
  1805. @item
  1806. Obtain the file @file{gcc-cc1plus.exe}, and place this in the same
  1807. directory that @file{gcc-cc1.exe} is kept.
  1808.  
  1809. The GNU C++ compiler can be invoked with a command like @samp{gcc /plus
  1810. /verbose file.cc}, which is equivalent to the command @samp{g++ -v -c
  1811. file.cc} in Unix.
  1812. @end enumerate
  1813.  
  1814. We try to put corresponding binaries and sources on the VMS distribution
  1815. tape.  But sometimes the binaries will be from an older version than the
  1816. sources, because we don't always have time to update them.  (Use the
  1817. @samp{/version} option to determine the version number of the binaries and
  1818. compare it with the source file @file{version.c} to tell whether this is
  1819. so.)  In this case, you should use the binaries you get to recompile the
  1820. sources.  If you must recompile, here is how:
  1821.  
  1822. @enumerate
  1823. @item
  1824. Execute the command procedure @file{vmsconfig.com} to set up the files
  1825. @file{tm.h}, @file{config.h}, @file{aux-output.c}, and @file{md.}, and
  1826. to create files @file{tconfig.h} and @file{hconfig.h}.  This procedure
  1827. also creates several linker option files used by @file{make-cc1.com} and
  1828. a data file used by @file{make-l2.com}.@refill
  1829.  
  1830. @smallexample
  1831. $ @@vmsconfig.com
  1832. @end smallexample
  1833.  
  1834. @item
  1835. Setup the logical names and command tables as defined above.  In
  1836. addition, define the VMS logical name @samp{GNU_BISON} to point at the
  1837. to the directories where the Bison executable is kept.  This should be
  1838. done with the command:@refill
  1839.  
  1840. @smallexample
  1841. $ assign /system /translation=concealed -
  1842.   disk:[bison.] gnu_bison
  1843. @end smallexample
  1844.  
  1845. You may, if you choose, use the @file{INSTALL_BISON.COM} script in the
  1846. @file{[BISON]} directory.
  1847.  
  1848. @item
  1849. Install the @samp{BISON} command with the command line:@refill
  1850.  
  1851. @smallexample
  1852. $ set command /table=sys$common:[syslib]dcltables -
  1853.   /output=sys$common:[syslib]dcltables -
  1854.   gnu_bison:[000000]bison
  1855. $ install replace sys$common:[syslib]dcltables
  1856. @end smallexample
  1857.  
  1858. @item
  1859. Type @samp{@@make-gcc} to recompile everything (alternatively, submit
  1860. the file @file{make-gcc.com} to a batch queue).  If you wish to build
  1861. the GNU C++ compiler as well as the GNU CC compiler, you must first edit
  1862. @file{make-gcc.com} and follow the instructions that appear in the
  1863. comments.@refill
  1864.  
  1865. @item
  1866. In order to use GCC, you need a library of functions which GCC compiled code
  1867. will call to perform certain tasks, and these functions are defined in the
  1868. file @file{libgcc2.c}.  To compile this you should use the command procedure
  1869. @file{make-l2.com}, which will generate the library @file{libgcc2.olb}.
  1870. @file{libgcc2.olb} should be built using the compiler built from
  1871. the same distribution that @file{libgcc2.c} came from, and
  1872. @file{make-gcc.com} will automatically do all of this for you.
  1873.  
  1874. To install the library, use the following commands:@refill
  1875.  
  1876. @smallexample
  1877. $ library gnu_cc:[000000]gcclib/delete=(new,eprintf)
  1878. $ library gnu_cc:[000000]gcclib/delete=L_*
  1879. $ library libgcc2/extract=*/output=libgcc2.obj
  1880. $ library gnu_cc:[000000]gcclib libgcc2.obj
  1881. @end smallexample
  1882.  
  1883. The first command simply removes old modules that will be replaced with
  1884. modules from @file{libgcc2} under different module names.  The modules
  1885. @code{new} and @code{eprintf} may not actually be present in your
  1886. @file{gcclib.olb}---if the VMS librarian complains about those modules
  1887. not being present, simply ignore the message and continue on with the
  1888. next command.  The second command removes the modules that came from the
  1889. previous version of the library @file{libgcc2.c}.
  1890.  
  1891. Whenever you update the compiler on your system, you should also update the
  1892. library with the above procedure.
  1893.  
  1894. @item
  1895. You may wish to build GCC in such a way that no files are written to the
  1896. directory where the source files reside.  An example would be the when
  1897. the source files are on a read-only disk.  In these cases, execute the
  1898. following DCL commands (substituting your actual path names):
  1899.  
  1900. @smallexample
  1901. $ assign dua0:[gcc.build_dir.]/translation=concealed, -
  1902.          dua1:[gcc.source_dir.]/translation=concealed  gcc_build
  1903. $ set default gcc_build:[000000]
  1904. @end smallexample
  1905.  
  1906. @noindent
  1907. where the directory @file{dua1:[gcc.source_dir]} contains the source
  1908. code, and the directory @file{dua0:[gcc.build_dir]} is meant to contain
  1909. all of the generated object files and executables.  Once you have done
  1910. this, you can proceed building GCC as described above.  (Keep in mind
  1911. that @file{gcc_build} is a rooted logical name, and thus the device
  1912. names in each element of the search list must be an actual physical
  1913. device name rather than another rooted logical name).
  1914.  
  1915. @item
  1916. @strong{If you are building GNU CC with a previous version of GNU CC,
  1917. you also should check to see that you have the newest version of the
  1918. assembler}.  In particular, GNU CC version 2 treats global constant
  1919. variables slightly differently from GNU CC version 1, and GAS version
  1920. 1.38.1 does not have the patches required to work with GCC version 2.
  1921. If you use GAS 1.38.1, then @code{extern const} variables will not have
  1922. the read-only bit set, and the linker will generate warning messages
  1923. about mismatched psect attributes for these variables.  These warning
  1924. messages are merely a nuisance, and can safely be ignored.
  1925.  
  1926. If you are compiling with a version of GNU CC older than 1.33, specify
  1927. @samp{/DEFINE=("inline=")} as an option in all the compilations.  This
  1928. requires editing all the @code{gcc} commands in @file{make-cc1.com}.
  1929. (The older versions had problems supporting @code{inline}.)  Once you
  1930. have a working 1.33 or newer GNU CC, you can change this file back.
  1931.  
  1932. @item
  1933. If you want to build GNU CC with the VAX C compiler, you will need to
  1934. make minor changes in @file{make-cccp.com} and @file{make-cc1.com}
  1935. to choose alternate definitions of @code{CC}, @code{CFLAGS}, and
  1936. @code{LIBS}.  See comments in those files.  However, you must
  1937. also have a working version of the GNU assembler (GNU as, aka GAS) as
  1938. it is used as the back-end for GNU CC to produce binary object modules
  1939. and is not included in the GNU CC sources.  GAS is also needed to
  1940. compile @file{libgcc2} in order to build @file{gcclib} (see above);
  1941. @file{make-l2.com} expects to be able to find it operational in
  1942. @file{gnu_cc:[000000]gnu-as.exe}.
  1943.  
  1944. To use GNU CC on VMS, you need the VMS driver programs
  1945. @file{gcc.exe}, @file{gcc.com}, and @file{gcc.cld}.  They are
  1946. distributed with the VMS binaries (@file{gcc-vms}) rather than the
  1947. GNU CC sources.  GAS is also included in @file{gcc-vms}, as is Bison.
  1948.  
  1949. Once you have successfully built GNU CC with VAX C, you should use the
  1950. resulting compiler to rebuild itself.  Before doing this, be sure to
  1951. restore the @code{CC}, @code{CFLAGS}, and @code{LIBS} definitions in
  1952. @file{make-cccp.com} and @file{make-cc1.com}.  The second generation
  1953. compiler will be able to take advantage of many optimizations that must
  1954. be suppressed when building with other compilers.
  1955. @end enumerate
  1956.  
  1957. Under previous versions of GNU CC, the generated code would occasionally
  1958. give strange results when linked with the sharable @file{VAXCRTL} library.
  1959. Now this should work.
  1960.  
  1961. Even with this version, however, GNU CC itself should not be linked with
  1962. the sharable @file{VAXCRTL}.  The version of @code{qsort} in
  1963. @file{VAXCRTL} has a bug (known to be present in VMS versions V4.6
  1964. through V5.5) which causes the compiler to fail.
  1965.  
  1966. The executables are generated by @file{make-cc1.com} and
  1967. @file{make-cccp.com} use the object library version of @file{VAXCRTL} in
  1968. order to make use of the @code{qsort} routine in @file{gcclib.olb}.  If
  1969. you wish to link the compiler executables with the shareable image
  1970. version of @file{VAXCRTL}, you should edit the file @file{tm.h} (created
  1971. by @file{vmsconfig.com}) to define the macro @code{QSORT_WORKAROUND}.
  1972.  
  1973. @code{QSORT_WORKAROUND} is always defined when GNU CC is compiled with
  1974. VAX C, to avoid a problem in case @file{gcclib.olb} is not yet
  1975. available.
  1976.  
  1977. @node Collect2
  1978. @section @code{collect2}
  1979.  
  1980. Many target systems do not have support in the assembler and linker for
  1981. ``constructors''---initialization functions to be called before the
  1982. official ``start'' of @code{main}.  On such systems, GNU CC uses a
  1983. utility called @code{collect2} to arrange to call these functions at
  1984. start time.
  1985.  
  1986. The program @code{collect2} works by linking the program once and
  1987. looking through the linker output file for symbols with particular names
  1988. indicating they are constructor functions.  If it finds any, it
  1989. creates a new temporary @samp{.c} file containing a table of them,
  1990. compiles it, and links the program a second time including that file.
  1991.  
  1992. @findex __main
  1993. @cindex constructors, automatic calls
  1994. The actual calls to the constructors are carried out by a subroutine
  1995. called @code{__main}, which is called (automatically) at the beginning
  1996. of the body of @code{main} (provided @code{main} was compiled with GNU
  1997. CC).  Calling @code{__main} is necessary, even when compiling C code, to
  1998. allow linking C and C++ object code together.  (If you use
  1999. @samp{-nostdlib}, you get an unresolved reference to @code{__main},
  2000. since it's defined in the standard GCC library.  Include @samp{-lgcc} at
  2001. the end of your compiler command line to resolve this reference.)
  2002.  
  2003. The program @code{collect2} is installed as @code{ld} in the directory
  2004. where the passes of the compiler are installed.  When @code{collect2}
  2005. needs to find the @emph{real} @code{ld}, it tries the following file
  2006. names:
  2007.  
  2008. @itemize @bullet
  2009. @item
  2010. @file{real-ld} in the directories listed in the compiler's search
  2011. directories.
  2012.  
  2013. @item
  2014. @file{real-ld} in the directories listed in the environment variable
  2015. @code{PATH}.
  2016.  
  2017. @item
  2018. The file specified in the @code{REAL_LD_FILE_NAME} configuration macro,
  2019. if specified.
  2020.  
  2021. @item
  2022. @file{ld} in the compiler's search directories, except that
  2023. @code{collect2} will not execute itself recursively.
  2024.  
  2025. @item
  2026. @file{ld} in @code{PATH}.
  2027. @end itemize
  2028.  
  2029. ``The compiler's search directories'' means all the directories where
  2030. @code{gcc} searches for passes of the compiler.  This includes
  2031. directories that you specify with @samp{-B}.
  2032.  
  2033. Cross-compilers search a little differently:
  2034.  
  2035. @itemize @bullet
  2036. @item
  2037. @file{real-ld} in the compiler's search directories.
  2038.  
  2039. @item
  2040. @file{@var{target}-real-ld} in @code{PATH}.
  2041.  
  2042. @item
  2043. The file specified in the @code{REAL_LD_FILE_NAME} configuration macro,
  2044. if specified.
  2045.  
  2046. @item
  2047. @file{ld} in the compiler's search directories.
  2048.  
  2049. @item
  2050. @file{@var{target}-ld} in @code{PATH}.
  2051. @end itemize
  2052.  
  2053. @code{collect2} explicitly avoids running @code{ld} using the file name
  2054. under which @code{collect2} itself was invoked.  In fact, it remembers
  2055. up a list of such names---in case one copy of @code{collect2} finds
  2056. another copy (or version) of @code{collect2} installed as @code{ld} in a
  2057. second place in the search path.
  2058.  
  2059. @code{collect2} searches for the utilities @code{nm} and @code{strip}
  2060. using the same algorithm as above for @code{ld}.
  2061.  
  2062. @node Header Dirs
  2063. @section Standard Header File Directories
  2064.  
  2065. @code{GCC_INCLUDE_DIR} means the same thing for native and cross.  It is
  2066. where GNU CC stores its private include files, and also where GNU CC
  2067. stores the fixed include files.  A cross compiled GNU CC runs
  2068. @code{fixincludes} on the header files in @file{$(tooldir)/include}.
  2069. (If the cross compilation header files need to be fixed, they must be
  2070. installed before GNU CC is built.  If the cross compilation header files
  2071. are already suitable for ANSI C and GNU CC, nothing special need be
  2072. done).
  2073.  
  2074. @code{GPLUS_INCLUDE_DIR} means the same thing for native and cross.  It
  2075. is where @code{g++} looks first for header files.  @code{libg++}
  2076. installs only target independent header files in that directory.
  2077.  
  2078. @code{LOCAL_INCLUDE_DIR} is used only for a native compiler.  It is
  2079. normally @file{/usr/local/include}.  GNU CC searches this directory so
  2080. that users can install header files in @file{/usr/local/include}.
  2081.  
  2082. @code{CROSS_INCLUDE_DIR} is used only for a cross compiler.  GNU CC
  2083. doesn't install anything there.
  2084.  
  2085. @code{TOOL_INCLUDE_DIR} is used for both native and cross compilers.  It
  2086. is the place for other packages to install header files that GNU CC will
  2087. use.  For a cross-compiler, this is the equivalent of
  2088. @file{/usr/include}.  When you build a cross-compiler,
  2089. @code{fixincludes} processes any header files in this directory.
  2090.